package com.example.demo.ImgTest;

import java.io.File;

import org.bytedeco.ffmpeg.global.avcodec;
import org.bytedeco.javacv.FFmpegFrameRecorder;
import org.bytedeco.javacv.OpenCVFrameConverter;
import org.bytedeco.opencv.global.opencv_core;
import org.bytedeco.opencv.opencv_core.IplImage;

import static org.bytedeco.opencv.helper.opencv_imgcodecs.cvLoadImage;


/**
 * 弃
 *
 * @author FF998
 */
public class JiaYinPing {
    public static void main(String[] args) throws Exception {
        System.out.println("start...");
        //保存的视频名称
        String saveMp4name = "D:\\upload_files\\yanhai\\OiOiOi\\AAA_OiOiOi.mp4";
        // 目录中所有的图片，都是jpg的，以1.jpg,2.jpg的方式，方便操作
        // 图片集合的目录
        String imagesPath = "D:\\upload_files\\yanhai\\OiOiOi";
        test(saveMp4name,imagesPath);
        System.out.println("end...");
    }

    public static void test(String saveMp4name,String imagesPath) throws Exception  {
        FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(saveMp4name,2560,1440);
        // 28
//		recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
        // 28
        recorder.setVideoCodec(avcodec.AV_CODEC_ID_FLV1);
        // 13
//		recorder.setVideoCodec(avcodec.AV_CODEC_ID_MPEG4);
        recorder.setFormat("flv");
        //	recorder.setFormat("mov,mp4,m4a,3gp,3g2,mj2,h264,ogg,MPEG4");
        recorder.setFrameRate(20);
        // yuv420p
        recorder.setPixelFormat(0);
        recorder.start();
        //
        OpenCVFrameConverter.ToIplImage conveter = new OpenCVFrameConverter.ToIplImage();
        // 列出目录中所有的图片，都是jpg的，以1.jpg,2.jpg的方式，方便操作
        File file = new File(imagesPath);
        File[] flist = file.listFiles();
        // 循环所有图片
        for(int i = 1; i <= flist.length; i++ ){
            String fname = imagesPath+i+".png";
            // 非常吃内存！！
            IplImage image = cvLoadImage(fname);
            recorder.record(conveter.convert(image));
            // 释放内存？ cvLoadImage(fname); // 非常吃内存！！
            opencv_core.cvReleaseImage(image);
        }
        recorder.stop();
        recorder.release();
    }

}
